﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TES.WEB.EnteRegulador
{
    public class DetallesEnlace
    {
        #region CAMPOS

        private int _numeroRed;


        private string _regional;


        private string _enlace;


        private string _estadoEnlace;


        private string _estadoLegalizacion;


        private bool _completo;
        #endregion

        #region PROPIEDADES

        public int NumeroRed
        {
            get { return _numeroRed; }
            set { _numeroRed = value; }
        }
        public string Regional
        {
            get { return _regional; }
            set { _regional = value; }
        }
        public string Enlace
        {
            get { return _enlace; }
            set { _enlace = value; }
        }
        public string EstadoEnlace
        {
            get { return _estadoEnlace; }
            set { _estadoEnlace = value; }
        }
        public string EstadoLegalizacion
        {
            get { return _estadoLegalizacion; }
            set { _estadoLegalizacion = value; }
        }
        public bool Completo
        {
            get { return _completo; }
            set { _completo = value; }
        }
        #endregion

        #region CONSTRUCTOR

            public DetallesEnlace()
            {
 
            }


            public DetallesEnlace(int numerored, string regional, string enlace, string estadoenlace, string estadolegalizacion, bool completo)
            {
                this._numeroRed = numerored;
                this._regional = regional;
                this._enlace = enlace;
                this._estadoEnlace = estadoenlace;
                this._estadoLegalizacion = estadolegalizacion;
                this._completo = completo;
                
            }

        #endregion

        #region METODOS

            public static List<DetallesEnlace> GetDatos(string sortExpressionDetalles, string directionDetalles, string filtrarDetallesRed, string filtrarDetallesRegional, string filtrarDetallesEnlace, string filtrarDetallesEstadoLegalizacion, string filtrarDetallesEstadoEnlace, string filtrarDetallesCompleto)
            {


                List<DetallesEnlace> lista = new List<DetallesEnlace>();

                DetallesEnlace enlace = new DetallesEnlace(1, "Norte", "Alguno", "Parece que funciona", "No se va a legalizar", true);
                DetallesEnlace enlace1 = new DetallesEnlace(2, "Costa", "Otro", "No funciona", "No se va a legalizar", false);
                DetallesEnlace enlace2 = new DetallesEnlace(3, "Norte", "Alguno", "Parece que funciona", "No se va a legalizar", true);
                DetallesEnlace enlace3 = new DetallesEnlace(4, "Costa", "Otro", "No funciona", "No se va a legalizar", false);
                DetallesEnlace enlace4 = new DetallesEnlace(3, "Costa", "Otro", "No funciona", "No se va a legalizar", true);
                lista.Add(enlace2);
                lista.Add(enlace1);
                lista.Add(enlace3);
                lista.Add(enlace);
                lista.Add(enlace4);

                if (filtrarDetallesRed != null || filtrarDetallesRegional != null || filtrarDetallesEnlace != null || filtrarDetallesEstadoEnlace != null || filtrarDetallesEstadoLegalizacion != null || filtrarDetallesCompleto != null)

                    return FiltrarLista(filtrarDetallesRed, filtrarDetallesRegional, filtrarDetallesEnlace, filtrarDetallesEstadoEnlace, filtrarDetallesEstadoLegalizacion, filtrarDetallesCompleto, lista);

                if (sortExpressionDetalles == "NINGUNO")
                    return lista;
                else
                    return SortGridView(sortExpressionDetalles, directionDetalles, lista);

            }

            private static List<DetallesEnlace> SortGridView(string sortExpression, string direction, List<DetallesEnlace> lista)
            {
                if (sortExpression != null && sortExpression != string.Empty)
                {
                    ComparadorDetallesEnlace comparador = new ComparadorDetallesEnlace(sortExpression);
                    lista.Sort(comparador);

                }

                //Now that we have sorted check to see if the sort direction is desc
                if (direction != null && direction == "DESC")
                {
                    lista.Reverse();
                }


                return lista;
            }

            private static List<DetallesEnlace> FiltrarLista(string filtrarRed, string filtrarRegional, string filtrarEnlace, string filtrarEstadoEnlace, string filtrarEstadoLegalizacion, string filtrarCompleto, List<DetallesEnlace> lista)
            {

                List<DetallesEnlace> lista2 = new List<DetallesEnlace>();
                lista2 = lista;

                if (filtrarRed != null)
                {
                    var response = from s in lista2
                                   where s._numeroRed == int.Parse(filtrarRed)
                                   select s;
                    lista2 = response.Cast<DetallesEnlace>().ToList();
                }

                if (filtrarRegional != null)
                {
                    var response1 = from s in lista2
                                    where s._regional.ToLower() == filtrarRegional.ToLower()
                                    select s;
                    lista2 = response1.Cast<DetallesEnlace>().ToList();
                }
                if (filtrarEnlace != null)
                {
                    var response2 = from s in lista2
                                    where s._enlace.ToLower() == filtrarEnlace.ToLower()
                                    select s;
                    lista2 = response2.Cast<DetallesEnlace>().ToList();
                }
                if (filtrarEstadoEnlace != null)
                {
                    var response4 = from s in lista2
                                    where s._estadoEnlace.ToLower() == filtrarEstadoEnlace.ToLower()
                                    select s;
                    lista2 = response4.Cast<DetallesEnlace>().ToList();
                }
                if (filtrarEstadoLegalizacion != null)
                {
                    var response3 = from s in lista2
                                    where s._estadoLegalizacion.ToLower() == filtrarEstadoLegalizacion.ToLower()
                                    select s;
                    lista2 = response3.Cast<DetallesEnlace>().ToList();
                }
                if (filtrarCompleto != null)
                {
                    Boolean dato = true;
                    if (filtrarCompleto == "No")
                        dato = false;

                    var response3 = from s in lista2
                                    where s._completo == dato
                                    select s;
                    lista2 = response3.Cast<DetallesEnlace>().ToList();
                }               


                return lista2;
            }
        #endregion





    }
}
